Skip to content

feat: add coverage report generation with cargo-llvm-cov#1301

Open
dblnz wants to merge 1 commit intohyperlight-dev:mainfrom
dblnz:rally/1190-generate-coverage-reports
Open

feat: add coverage report generation with cargo-llvm-cov#1301
dblnz wants to merge 1 commit intohyperlight-dev:mainfrom
dblnz:rally/1190-generate-coverage-reports

Conversation

@dblnz
Copy link
Contributor

@dblnz dblnz commented Mar 11, 2026

Add coverage infrastructure for the Hyperlight project:

Partially addresses #1190

  • Justfile: add coverage, coverage-html, coverage-lcov, and coverage-ci recipes using cargo-llvm-cov for LLVM source-based code coverage
  • CI: add Coverage.yml weekly workflow (Monday 06:00 UTC, manual trigger) running on kvm/amd with self-built guest binaries
  • docs: add how-to-run-coverage.md with local and CI usage instructions

Guest/no_std crates are excluded from coverage because they define #[panic_handler] and cannot be compiled for the host target under coverage instrumentation. Coverage targets host-side crates only.

This PR:

  • only runs this on linux with KVM

@dblnz dblnz added the kind/enhancement For PRs adding features, improving functionality, docs, tests, etc. label Mar 11, 2026
Copy link
Contributor

@jsturtevant jsturtevant left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its nice to see a report. Do you have thoughts on how do we ensure we are looking at this report and not just another artifact? Do we post an issue on run? post in release? Review at community meetings?

I ran it locally and I am seeing 70.42%, which quite high! Its nice to see this. I am not to worried about minor changes but would like to see it trending even or even improving over time.

ludfjig
ludfjig previously approved these changes Mar 12, 2026
Copy link
Contributor

@ludfjig ludfjig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is awesome, I also tried it locally and works great. I only have one question: is this the recommended way to generate coverage reports (using cargo-llvm-cov), or are there alternative ways? I'm only asking because I am not familiar with this area.

Comment on lines +89 to +94
- name: Upload LCOV coverage report
if: always()
uses: actions/upload-artifact@v7
with:
name: coverage-lcov-${{ matrix.hypervisor }}-${{ matrix.cpu }}
path: target/coverage/lcov.info
Copy link
Contributor

@ludfjig ludfjig Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there's an option to fail the workflow if the file is not found which could be useful. Should we also using existing framework/script to create an automatic issue if this workflow fails (like we do in another workflow)?

@dblnz
Copy link
Contributor Author

dblnz commented Mar 16, 2026

This is awesome, I also tried it locally and works great. I only have one question: is this the recommended way to generate coverage reports (using cargo-llvm-cov), or are there alternative ways? I'm only asking because I am not familiar with this area.

From the research I've done, there are two other alternatives to llvm-cov: tarpaulin and grcov.
Tarpaulin uses ptrace by default (only on Linux), can be configured to use LLVM, but it has some limitations (coverage data not returned when non-zero exit, some areas of thread unsafety).
Grcov could also be a good alternative for us, it supports multiple aggregation sources, but it's slightly more complicated to set up. Given that I don't think we need that much flexibility at the moment, I haven't used this one.
I chose llvm-cov due to its accuracy (uses the llvm backend), support across OS (we could enable windows also) and its relatively simple setup.

@dblnz
Copy link
Contributor Author

dblnz commented Mar 16, 2026

Its nice to see a report. Do you have thoughts on how do we ensure we are looking at this report and not just another artifact? Do we post an issue on run? post in release? Review at community meetings?

I ran it locally and I am seeing 70.42%, which quite high! Its nice to see this. I am not to worried about minor changes but would like to see it trending even or even improving over time.

About this, I think we should definitely have this in mind when we do changes. Although, I wouldn't condition any PR on it as it takes a lot to run (same time the PR validations take).
Considering we are still making fundamental changes in the codebase, this metric could change a lot.

So maybe start with having this info as part of the release artifacts is a good start? Then we could see if we need to discuss it more often.

One nice to have thing I was thinking about is to try and correlate the coverage output with the changes made in a PR so that we could have a check saying we are only testing x percent of the newly introduced code. I'll hack at this once I get some more time

@dblnz
Copy link
Contributor Author

dblnz commented Mar 16, 2026

You can check out how the summary looks like at: https://github.com/hyperlight-dev/hyperlight/actions/runs/22959438794?pr=1301

@dblnz
Copy link
Contributor Author

dblnz commented Mar 16, 2026

I am also looking at enabling the branch coverage report (it needs nightly).

@jsturtevant
Copy link
Contributor

So maybe start with having this info as part of the release artifacts is a good start? Then we could see if we need to discuss it more often.

Another thought is if it drops by %5 to create an issue (we have some machinery that does this as part of other ci workflows). that would inform us that we've been going down.

Otherwise this looks great and is a good first start. Feel free to move forward with this and do follow ups.

@dblnz
Copy link
Contributor Author

dblnz commented Mar 24, 2026

So maybe start with having this info as part of the release artifacts is a good start? Then we could see if we need to discuss it more often.

Another thought is if it drops by %5 to create an issue (we have some machinery that does this as part of other ci workflows). that would inform us that we've been going down.

Otherwise this looks great and is a good first start. Feel free to move forward with this and do follow ups.

Now that I'm back, I'll move this forward by addressing all the comments and suggestions.
Thanks for having a look at this!

Add coverage infrastructure for the Hyperlight project:

- Justfile: add coverage-run, coverage, coverage-html, coverage-lcov,
  and coverage-ci recipes using cargo-llvm-cov for LLVM source-based
  code coverage. Tests run once via coverage-run; report recipes just
  generate the desired output format from collected profdata.
- CI: add Coverage.yml weekly workflow (Monday 06:00 UTC, manual trigger)
  running on kvm/amd with self-built guest binaries
- coverage-ci mirrors test-like-ci by running multiple test phases with
  different feature combinations (default, single-driver, crashdump,
  tracing) and merging profdata into a single unified report
- Coverage summary is displayed in the GitHub Actions Job Summary for
  quick viewing; full HTML report is downloadable as an artifact
- docs: add how-to-run-coverage.md with local and CI usage instructions

Guest/no_std crates are excluded from coverage because they define
coverage instrumentation. Coverage targets host-side crates only.

Closes hyperlight-dev#1190

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Doru Blânzeanu <dblnz@pm.me>
@dblnz dblnz force-pushed the rally/1190-generate-coverage-reports branch from 808b8eb to 9622c18 Compare March 24, 2026 19:02
@dblnz dblnz requested review from jsturtevant and ludfjig March 24, 2026 21:55
@ludfjig ludfjig requested a review from Copilot March 24, 2026 22:31
Copy link
Contributor

@ludfjig ludfjig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

run: just coverage-ci ${{ matrix.hypervisor }}

- name: Coverage summary
if: always()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do some of these have if: always()?

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Rust coverage report generation for Hyperlight using cargo-llvm-cov, including local just recipes, a scheduled CI workflow, and documentation for running coverage.

Changes:

  • Introduces just recipes to collect coverage data and emit text/HTML/LCOV reports.
  • Adds a weekly (and manually triggerable) GitHub Actions workflow to generate and upload coverage artifacts.
  • Adds documentation describing local and CI coverage usage and outputs.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 11 comments.

File Description
docs/how-to-run-coverage.md New guide documenting local + CI coverage workflows and outputs.
Justfile Adds cargo-llvm-cov install/bootstrap and coverage run/report recipes.
.github/workflows/Coverage.yml Adds scheduled CI workflow to run coverage and publish summaries/artifacts.

Comment on lines +7 to +8
paths:
- .github/workflows/Coverage.yml
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pull_request.paths is mis-indented, which will make the workflow YAML invalid (or at least not behave as intended). Align paths: under pull_request: with two additional spaces (same indentation level as schedule:).

Suggested change
paths:
- .github/workflows/Coverage.yml
paths:
- .github/workflows/Coverage.yml

Copilot uses AI. Check for mistakes.
Comment on lines +519 to +538
cargo +nightly llvm-cov report

# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html

# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info

# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The report-generation commands don’t constrain the workspace/package set (unlike coverage-run, which explicitly excludes guest/no_std crates). Depending on cargo-llvm-cov behavior, report may attempt to (re)build or consider additional workspace members and could fail on excluded guest crates. Fix by passing the same package selection flags used during collection (e.g., {{ coverage-packages }} / explicit -p ...) to each cargo llvm-cov report ... invocation so report generation is pinned to host-side crates.

Suggested change
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
cargo +nightly llvm-cov report {{ coverage-packages }}
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report {{ coverage-packages }} --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report {{ coverage-packages }} --lcov --output-path target/coverage/lcov.info
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report {{ coverage-packages }} --html --output-dir target/coverage/html
cargo +nightly llvm-cov report {{ coverage-packages }} --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report {{ coverage-packages }} | tee target/coverage/summary.txt

Copilot uses AI. Check for mistakes.
Comment on lines +519 to +538
cargo +nightly llvm-cov report

# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html

# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info

# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The report-generation commands don’t constrain the workspace/package set (unlike coverage-run, which explicitly excludes guest/no_std crates). Depending on cargo-llvm-cov behavior, report may attempt to (re)build or consider additional workspace members and could fail on excluded guest crates. Fix by passing the same package selection flags used during collection (e.g., {{ coverage-packages }} / explicit -p ...) to each cargo llvm-cov report ... invocation so report generation is pinned to host-side crates.

Suggested change
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
cargo +nightly llvm-cov report {{ coverage-packages }}
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report {{ coverage-packages }} --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report {{ coverage-packages }} --lcov --output-path target/coverage/lcov.info
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report {{ coverage-packages }} --html --output-dir target/coverage/html
cargo +nightly llvm-cov report {{ coverage-packages }} --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report {{ coverage-packages }} | tee target/coverage/summary.txt

Copilot uses AI. Check for mistakes.
Comment on lines +519 to +538
cargo +nightly llvm-cov report

# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html

# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info

# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The report-generation commands don’t constrain the workspace/package set (unlike coverage-run, which explicitly excludes guest/no_std crates). Depending on cargo-llvm-cov behavior, report may attempt to (re)build or consider additional workspace members and could fail on excluded guest crates. Fix by passing the same package selection flags used during collection (e.g., {{ coverage-packages }} / explicit -p ...) to each cargo llvm-cov report ... invocation so report generation is pinned to host-side crates.

Suggested change
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
cargo +nightly llvm-cov report {{ coverage-packages }}
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report {{ coverage-packages }} --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report {{ coverage-packages }} --lcov --output-path target/coverage/lcov.info
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report {{ coverage-packages }} --html --output-dir target/coverage/html
cargo +nightly llvm-cov report {{ coverage-packages }} --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report {{ coverage-packages }} | tee target/coverage/summary.txt

Copilot uses AI. Check for mistakes.
Comment on lines +519 to +538
cargo +nightly llvm-cov report

# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html

# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info

# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The report-generation commands don’t constrain the workspace/package set (unlike coverage-run, which explicitly excludes guest/no_std crates). Depending on cargo-llvm-cov behavior, report may attempt to (re)build or consider additional workspace members and could fail on excluded guest crates. Fix by passing the same package selection flags used during collection (e.g., {{ coverage-packages }} / explicit -p ...) to each cargo llvm-cov report ... invocation so report generation is pinned to host-side crates.

Suggested change
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
cargo +nightly llvm-cov report | tee target/coverage/summary.txt
cargo +nightly llvm-cov report {{ coverage-packages }}
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html {{ coverage-packages }}
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-lcov hypervisor="kvm":
mkdir -p target/coverage
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info {{ coverage-packages }}
# generate all coverage reports for CI: HTML + LCOV + text summary.
# (run `just guests` first to build guest binaries)
coverage-ci hypervisor="kvm": (coverage-run hypervisor)
mkdir -p target/coverage
cargo +nightly llvm-cov report --html --output-dir target/coverage/html {{ coverage-packages }}
cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info {{ coverage-packages }}
cargo +nightly llvm-cov report {{ coverage-packages }} | tee target/coverage/summary.txt

Copilot uses AI. Check for mistakes.

# install cargo-llvm-cov if not already installed and ensure nightly toolchain + llvm-tools are available
ensure-cargo-llvm-cov:
command -v cargo-llvm-cov >/dev/null 2>&1 || cargo install cargo-llvm-cov
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reproducibility, consider installing cargo-llvm-cov with --locked (and optionally pinning a version) to avoid CI/local differences due to upstream crate updates.

Suggested change
command -v cargo-llvm-cov >/dev/null 2>&1 || cargo install cargo-llvm-cov
command -v cargo-llvm-cov >/dev/null 2>&1 || cargo install cargo-llvm-cov --locked

Copilot uses AI. Check for mistakes.
Comment on lines +517 to +527
# for this to work you need to run `coverage-run hypervisor` before hand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report

# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html

# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct spelling: change 'before hand' to 'beforehand'.

Suggested change
# for this to work you need to run `coverage-run hypervisor` before hand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
# for this to work you need to run `coverage-run hypervisor` beforehand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` beforehand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` beforehand

Copilot uses AI. Check for mistakes.
Comment on lines +517 to +527
# for this to work you need to run `coverage-run hypervisor` before hand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report

# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html

# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct spelling: change 'before hand' to 'beforehand'.

Suggested change
# for this to work you need to run `coverage-run hypervisor` before hand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
# for this to work you need to run `coverage-run hypervisor` beforehand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` beforehand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` beforehand

Copilot uses AI. Check for mistakes.
Comment on lines +517 to +527
# for this to work you need to run `coverage-run hypervisor` before hand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report

# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html

# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct spelling: change 'before hand' to 'beforehand'.

Suggested change
# for this to work you need to run `coverage-run hypervisor` before hand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` before hand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` before hand
# for this to work you need to run `coverage-run hypervisor` beforehand
coverage hypervisor="kvm":
cargo +nightly llvm-cov report
# generate an HTML coverage report to target/coverage/html/
# for this to work you need to run `coverage-run hypervisor` beforehand
coverage-html hypervisor="kvm":
cargo +nightly llvm-cov report --html --output-dir target/coverage/html
# generate LCOV coverage output to target/coverage/lcov.info
# for this to work you need to run `coverage-run hypervisor` beforehand

Copilot uses AI. Check for mistakes.
Comment on lines +62 to +68
| Recipe | Output | Description |
|---|---|---|
| `just coverage-run` | profiling data | Runs tests with coverage instrumentation (must be run first) |
| `just coverage` | stdout | Text summary of line coverage |
| `just coverage-html` | `target/coverage/html/` | HTML report for browsing |
| `just coverage-lcov` | `target/coverage/lcov.info` | LCOV format for tooling |
| `just coverage-ci <hypervisor>` | All of the above | CI recipe: runs tests + generates HTML + LCOV + text summary |
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The markdown table rows start with ||, which creates an extra empty first column and renders incorrectly in many markdown viewers. Use a single leading | for each row so the table renders as intended.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind/enhancement For PRs adding features, improving functionality, docs, tests, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants